#include <iostream>
using namespace std;

long long n, m, a, b;
long long ret;
int main()
{
    cin >> n >> m >> a >> b;
    for (long long x = 0; x <= min(n / 2, m); x++)
    {
        long long y = min(n - x * 2, (m - x) / 2);
        ret = max(ret, a * x + b * y);
    }
    cout << ret << endl;
    return 0;
}
// #include <iostream>
// using namespace std;
// const int N = 1e5 + 10;
// int p[N];
// int dp[N][2];
// int main() 
// {
//     int n = 0;
//     cin >> n;
//     for(int i = 0; i < n; i++) cin >> p[i];
//     dp[0][0] = -p[0];
//     for(int i = 1; i < n; i++)
//     {
//         dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - p[i]);
//         dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + p[i]);
//     }
//     cout << max(dp[n - 1][0], dp[n - 1][1]) << endl;
//     return 0;
// }

#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int p[N];
int main()
{
    int ret = 0;
    int n = 0;
    cin >> n;
    for (int i = 0; i < n; i++) cin >> p[i];
    for (int i = 1; i < n; i++)
    {
        if (p[i] > p[i - 1])
            ret += p[i] - p[i - 1];
    }
    cout << ret << endl;
    return 0;
}
#include <iostream>
using namespace std;
#include<algorithm>
#include<string>
int main()
{
    string s;
    getline(cin, s);
    int n = s.size();
    int left = 0;
    reverse(s.begin(), s.end());
    while (left < n)
    {
        int right = left;
        while (right < n && s[right] != ' ')
            right++;
        reverse(s.begin() + left, s.begin() + right);
        while (right < n && s[right] == ' ') right++;
        left = right;
    }

    cout << s << endl;

    return 0;
}